const db=require('../db/index')

//导入加密包
const bcrypt=require('bcryptjs')

// 导入生成Token
const jwt=require('jsonwebtoken')

// 导入全局的配置文件
const config=require('../config.js')

// const formidable = require('formidable');



// 注册新用户的处理函数
exports.regUser=(req,res)=>{
    //获取客服端提交到服务器的用户信息
    const userinfo=req.body

    // 注册用户名
    const sqlStr=`select * from user where username=?`
    db.query(sqlStr,userinfo.username,(err,results)=>{
        if(err){
            // return res.send({status:1,message:"sql语句没有执行"})
            return res.cc(err)
        }
        if(results.length>0){
            return res.cc('用户名被占用，请重新输入其他用户名')
        }
        // 调用bcrypt.hashSync()对密码进行加密
        userinfo.password=bcrypt.hashSync(userinfo.password,10)
        console.log(userinfo);

        // 插入新用户数据
        const sql='insert into user set ?'
        db.query(sql,userinfo,(err,results)=>{
        // db.query(sql,{username:userinfo.username,password:userinfo.password},(err,results)=>{
            if(err){
                // return res.send({status:1,message:'sql语句没有执行'})
                return res.cc(err)
            }
            // 判断影响行数是否为1
            if(results.affectedRows!==1) return res.cc('注册用户失败，请稍后再试！')
    
            // 注册用户成功
            res.cc('注册成功！',0)
        })
    })

}

// 登录用户的处理函数
exports.login=(req,res)=>{
    const userinfo=req.body
    // 查询用户
    const sql=`select * from user where username=?`
    // 查询用户是否正确
    db.query(sql,userinfo.username,(err,results)=>{
        if(err) return res.cc(err)
        if(results.length!==1) return res.cc('登录失败!')
        // 查询密码是否正确
        const compareResult=bcrypt.compareSync(userinfo.password,results[0].password)
        if(!compareResult) return res.cc('登录失败')

        //在服务器端生成Token的字符串
        const user={...results[0],password:'',avatar:''}
        // 对用户的信息进行加密，生成Token字符串
        const tokenStr=jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
        console.log(tokenStr);
        // 调用res.send()将Token响应给客服端
        res.send({
            status:0,
            message:'登录成功',
            token:'Bearer ' + tokenStr,
            data:{
                username:results[0].username,
                gender:results[0].gender?results[0].gender:0, //性别：0,1,2
                introduction:results[0].introduction,
                avatar:results[0].avatar,
                role:results[0].role,
                id:results[0].id
            }
        })
    })

}
// 上传用户信息函数
exports.uploadUser=(req,res)=>{
    const userinfo=req.body
    console.log(req.body);
    const sql=`select * from user where username=?`
    db.query(sql,userinfo.username,(err,results)=>{
        if(err) return res.cc(err)
        // 更新用户
        const sql=`update user set username=?, gender=?,introduction=?,avatar=? where id=?`
        // 查询用户是否正确
        db.query(sql,[userinfo.username,userinfo.gender,userinfo.introduction,userinfo.avatar,userinfo.id],(err,results)=>{     
            if(err) return res.cc(err)
            if(results.affectedRows!==1) return res.cc('上传失败!')
            console.log(results);
            res.send({
                status:0,
                message:'上传成功',
                data:{
                    username:userinfo.username,
                    gender:userinfo.gender, //性别：0,1,2
                    introduction:userinfo.introduction,
                    avatar:userinfo.avatar
                }
            })
        })
    })
}
// 添加用户
exports.addUser=(req,res)=>{
    const userinfo=req.body
    userinfo.password=bcrypt.hashSync(userinfo.password,10)
    const sql=`insert into user set ?`
    db.query(sql,userinfo,(err,results)=>{
        if(err) return res.cc(err)
        if(results.affectedRows!==1) return res.cc('添加失败')
        res.send({
            status:0,
            message:'添加成功'
        })
    })    
}

// 获取所有用户信息
exports.allUser=(req,res)=>{
    const sql=`select * from user`
    db.query(sql,(err,results)=>{
        if(err) return res.cc(err)
        res.send({
            status:0,
            message:'获取用户',
            userinfo:results
        })
    })
}

//删除用户
exports.deleteUser=(req,res)=>{
    const sql=`delete from user where id=?`
    db.query(sql,req.body.id,(err,results)=>{
        if(err) return res.cc(err)
        if(results.affectedRows!==1) return res.cc('删除失败')
        res.cc('删除成功',0)
    })
}

// 更新用户
exports.editUser=(req,res)=>{
    const userinfo=req.body 
    userinfo.password=bcrypt.hashSync(userinfo.password,10)
    const sql=`update user set username=?,password=?,role=?,introduction=?,avatar=? where id=?`
    db.query(sql,[userinfo.username,userinfo.password,userinfo.role,userinfo.introduction,userinfo.avatar,userinfo.id],(err,results)=>{
        if(err) return res.cc(err)
        if(results.affectedRows!==1) return res.cc('更新用户失败')
        res.send({
            status:0,
            message:'更新成功'
        })
    })
}

// 上传图片
exports.updateUserAvatar=(req,res)=>{
    const sql=`update user set avatar=? where id=?`
    db.query(sql,[req.body.avatar,req.body.id],(err,results)=>{
        if(err) return res.cc(err)
        console.log(results);
        if(results.affectedRows!==1) return res.cc('更新失败')
        res.send({
            status:0,
            message:'更新成功',
            avatar:req.body.avatar
        })
    })
}